# 简单、可扩展的 Makefile
CC ?= gcc
CFLAGS ?= -Wall -Wextra -g -O2
LDFLAGS ?= -lpthread -lcrypt
TARGET ?= server

# 自动查找所有 .c 源文件（包含子目录），生成对应的 .o 列表
SRCS := $(shell find . -name '*.c')
OBJS := $(SRCS:.c=.o)

# 将源码所在目录作为 include 目录（自动包含子目录头文件）
INCDIRS := $(sort $(dir $(SRCS)))
CPPFLAGS += $(patsubst %,-I%,$(INCDIRS))

.PHONY: all clean rebuild

all: $(TARGET)

$(TARGET): $(OBJS)
	$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)

# 通用编译规则：对任意 .c 生成对应 .o
%.o: %.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $<

clean:
	-rm -f $(OBJS) $(TARGET)

rebuild: clean all